%% This file is xepersian-multiplechoice.sty
%%
%% Copyright 2009 by Vafa Khalighi
%%
%%%% It may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{xepersian-multiplechoice}[2009/03/21 v0.1
                    Multiple Choice Questionnaire class for Persian in XeLaTeX (Author: Vafa Khalighi)]
\RequirePackage{pifont}
\RequirePackage{fullpage}
\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{verbatim}
\RequirePackage{fmultico}
\def\@headerfont{\bfseries}
\newcommand\headerfont[1]{\gdef\@headerfont{#1}}
\def\@X{X}
\newcommand\X[1]{\gdef\@X{#1}}
\def\pbs#1{\let\tmp=\\#1\let\\=\tmp}
\newcommand\makeform@nocorrection{%
  \addtocontents{frm}{\protect\end{tabular}}
  \@starttoc{frm}}
\newcommand\makeform@correction{%
  \addtocontents{frm}{\protect\end{tabular}}}
\newcommand\makemask@nocorrection{%
  \addtocontents{msk}{\protect\end{tabular}}
  \@starttoc{msk}}
\newcommand\makemask@correction{%
  \addtocontents{msk}{\protect\end{tabular}}}
\newlength\questionspace
\setlength\questionspace{0pt}
\newcommand\answerstitle[1]{\gdef\@answerstitle{#1}}
\def\@answerstitlefont{\bfseries}
\newcommand\answerstitlefont[1]{\gdef\@answerstitlefont{#1}}
\def\@answernumberfont{\bfseries}
\newcommand\answernumberfont[1]{\gdef\@answernumberfont{#1}}
\newcounter{question}\stepcounter{question}
\newcounter{@choice}
\def\@initorcheck{%
  \xdef\@choices{\the@choice}%
  \setcounter{@choice}{1}%
  \gdef\@arraydesc{|l||}%
  \gdef\@headerline{}%
  \whiledo{\not{\value{@choice}>\@choices}}{
    \xdef\@arraydesc{\@arraydesc c|}
    \def\@appendheader{\g@addto@macro\@headerline}
    \@appendheader{&\protect\@headerfont}
    \edef\@the@choice{{\alph{@choice}}}
    \expandafter\@appendheader\@the@choice
    \stepcounter{@choice}}%
  \addtocontents{frm}{%
    \protect\begin{tabular}{\@arraydesc}
    \protect\hline
    \@headerline\protect\\\protect\hline\protect\hline}%
  \addtocontents{msk}{%
    \protect\begin{tabular}{\@arraydesc}
    \protect\hline
    \@headerline\protect\\\protect\hline\protect\hline}%
  \gdef\@initorcheck{%
    \ifthenelse{\value{@choice} = \@choices}{}{%
      \ClassError{xepersian-multiplechoice}{Question \thequestion: wrong number of choices
        (\the@choice\space instead of \@choices)}{%
        Questions must all have the same number of proposed answers.%
        \MessageBreak
        Type X <return> to quit, fix your MCQ (multiple choice question) and rerun XeLaTeX.}}}}
\newenvironment{question}[1]{%
  %% \begin{question}
  \begin{minipage}{\textwidth}
    \xdef\@formanswerline{\@questionheader}%
    \xdef\@maskanswerline{\@questionheader}%
    \fbox{\parbox[c]{\linewidth}{#1}}
    \vspace\questionspace\par
    {\@answerstitlefont\@answerstitle}
\begin{multicols}{4}
    \begin{list}{\@answernumberfont\alph{@choice})~}{\usecounter{@choice}}}{%
  %% \end{question}
    \end{list}
\end{multicols}
    \@initorcheck%
    \addtocontents{frm}{\@formanswerline\protect\\\protect\hline}%
    \addtocontents{msk}{\@maskanswerline\protect\\\protect\hline}%
  \end{minipage}
  \stepcounter{question}}
\def\@truesymbol{\ding{52}~}
\def\@falsesymbol{\ding{56}~}
\newcommand\truesymbol[1]{\gdef\@truesymbol{#1}}
\newcommand\falsesymbol[1]{\gdef\@falsesymbol{#1}}
\def\@true@nocorrection{\item}
\def\@false@nocorrection{\item}
\def\@true@correction{\item[\@truesymbol\refstepcounter{@choice}]}
\def\@false@correction{\item[\@falsesymbol\refstepcounter{@choice}]}
\newcommand\true{%
  \xdef\@formanswerline{\@formanswerline&}%
  \xdef\@maskanswerline{\@maskanswerline&\@X}%
  \@true}%
\newcommand\false{%
  \xdef\@formanswerline{\@formanswerline&}%
  \xdef\@maskanswerline{\@maskanswerline&}%
  \@false}%
\def\@correctionstyle{\itshape}
\newcommand\correctionstyle[1]{\gdef\@correctionstyle{#1}}
\newenvironment{@correction}{\@correctionstyle}{}
 \def\@questionheader{سؤال \thequestion}
  \answerstitle{جوابهای ممکن:}
\DeclareOption{nocorrection}{%
  \let\@true\@true@nocorrection
  \let\@false\@false@nocorrection
  \let\correction\comment
  \let\endcorrection\endcomment
  \def\makeform{\makeform@nocorrection}
  \def\makemask{\makemask@nocorrection}}
\DeclareOption{correction}{%
  \let\@true\@true@correction
  \let\@false\@false@correction
  \let\correction\@correction
  \let\endcorrection\end@correction
  \def\makeform{\makeform@correction}
  \def\makemask{\makemask@correction}}
\ExecuteOptions{nocorrection}
\newcommand\questiontitle[1]{\gdef\@questiontitle{#1}}
\def\@questiontitlefont{\bfseries}
\newcommand\questiontitlefont[1]{\gdef\@questiontitlefont{#1}}
\newlength\questiontitlespace
\setlength\questiontitlespace{5pt}
\newlength\questionsepspace
\setlength\questionsepspace{20pt}
\gdef\@questionsepspace{0pt}
\let\old@question\question
\let\old@endquestion\endquestion
\renewenvironment{question}[1]{%
  %% \begin{question}
  \vspace\@questionsepspace
  \fbox{\parbox[c]{0.25\linewidth}{\@questiontitlefont\@questiontitle}}
  \nopagebreak\vspace\questiontitlespace\par
  \old@question{#1}}{%
  %% \end{question}
  \old@endquestion
  \gdef\@questionsepspace{\questionsepspace}}
 \questiontitle{سؤال \thequestion:}
\ProcessOptions
\endinput
